#!/usr/bin/python
import sys

parameters_help= """
-i:			Especifica el archivo de donde se lee
-o:			Especifica el archivo de salida
-p:			Puede pasarse varias veces, y de ser pasado varias veces
			representa que deben cumplirse todos los patrones. 
			Un patron es de la forma:
			a=k, p=k, neg={0|1}, mode={B|F|W}, fn=k, tn=k,
			con k un numero cualquiera.
-iter:			Especifica la iteracion que se desea obtener en 
			el archivo de salida. Este parametro es opcional 
			indicando que se desean todas."""
def main(argv):
	input_file_option= "-i"
	pattern_option= "-p"
	output_file_option= "-o" 
	iteration_option= "-iter" 
	help_option= "-h"
	options= {input_file_option:"results", 
						pattern_option:[], 
						output_file_option:"filtered_results",
						iteration_option:-1,
						help_option:0}

	for i in range(1, len(argv)):
		if options.has_key(argv[i]):
			if argv[i] == pattern_option:
				options[pattern_option].append(argv[i+1])
			elif argv[i] == help_option:
				options[help_option]= 1
			else:
			 options[argv[i]]= argv[i+1]
			 
	if options[help_option] == 1:
		print "uso: " + argv[0] + "<parametros>\n" + parameters_help
		return
	try:
		results_stream= open(options[input_file_option], 'r')	
	except:
		print "no se encuentra " + options[input_file_option]
		return

	output_stream= open(options[output_file_option], 'w')
	patterns= options[pattern_option]
	iteration= int(options[iteration_option])

	lines= results_stream.readlines()
	res= []
	for index in range(0, len(lines)-1):
		line= lines[index]
		# si matchea todos los patterns
		if reduce(lambda b,p:b and line.find(p) >= 0, 
				patterns, True):

			tmp_str= lines[index+1].replace("\r", "").replace("\n", "")
			if iteration > 0:
				tmp_str= tmp_str.split(" ")[iteration-1] + '\n'

			tmp= tmp_str.split(" ")
			while len(res)<len(tmp):
				res.append([])

			for i in range(0, len(tmp)):
				res[i].append(tmp[i].split(';')[0])
				
			# output_stream.write(dame_modo(line) + ";" + str.replace(' ',';'))

	i= 1
	for l in res:
		output_stream.write(str(i) + "\t" + reduce(lambda s,x:s+"\t"+x, l, "")[1:] + '\n')
		i+= 1

	results_stream.close()
	output_stream.close()


def dame_modo(linea):
	nom= {"B":"Backward",
		"F":"Forward",
		"H":"Horn"}
	pos_mode= linea.find("mode")
	pos_neg= linea.find("neg")
	mode= nom[linea[pos_mode+5:pos_mode+6]] + " " + linea[pos_neg+4:pos_neg+5] 
	return mode
	

if __name__ == '__main__':
	main(sys.argv)
